#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<signal.h>
using namespace std;


pid_t id;
void waitProcess(int signo)
{
    
    printf("捕捉到一个信号:%d,who:%d\n",getpid());
    sleep(5);
    while(1)
    {
        pid_t res=waitpid(-1,NULL,WNOHANG);//-1等待任意子进程 WNOHNAG非阻塞式等待
        if(res>0)
        {
            printf("wait success,res:%d,id:%d\n",res,id);
        }
        else break;
    }
    printf("handler done..\n");
}


int main()
{
    // signal(SIGCHLD,waitProcess);
    signal(SIGCHLD,SIG_IGN);
    id=fork();
    if(id==0)
    {
        int cnt=5;
        while(cnt)
        {
            cout<<"我是子进程 pid:"<<getpid()<<"ppid:"<<getppid()<<endl;
            sleep(1);
            cnt--;
        }
        exit(1);
    }

    
        sleep(15);
    
    return 0;
}



// volatile int quit=0;//volatile保证内存可见性

// void handler(int signo)
// {
//     printf("change quit from 0 to 1\n");
//     quit=1;
//     printf("quit:%d\n",quit);

// }
// int main()
// {
//     signal(2,handler);
//     cout<<"1";
//     while(!quit);


//     printf("main quit 正常\n");
//     return 0;
// }
